/*
 * @Author: 肖思汗 
 * @Date: 2025-06-27 19:43:58 
 * @Last Modified by: xiaosihan
 * @Last Modified time: 2025-09-25 15:16:57
 */


import Taro from "@tarojs/taro";
import { get } from "lodash";
import { makeAutoObservable } from "mobx";
import utils from "./utils";
class UtilsStore {
    constructor() {
        makeAutoObservable(this, {}, { deep: false });

        const windowInfo = Taro.getWindowInfo();
        // console.log("windowInfo", windowInfo);

        const { windowHeight, windowWidth, pixelRatio } = windowInfo;

        this.devicePixelRatio = pixelRatio;

        // 屏幕的高度
        this.windowHeight = windowHeight;
        // 屏幕的宽度
        this.windowWidth = windowWidth;

        // 判断是否为H5环境
        const isH5 = (process.env.TARO_ENV as string) === 'h5';

        if (isH5) {
            // H5环境下计算安全区域
            // 顶部状态栏高度 - 使用默认值或尝试通过CSS变量获取
            let safeAreaTop = 44; // 默认值，适用于大多数设备

            // 尝试通过CSS变量获取安全区域顶部值
            if (typeof window !== 'undefined' && window.getComputedStyle && typeof document !== 'undefined') {
                const safeAreaTopCSS = window.getComputedStyle(document.documentElement).getPropertyValue('--safe-area-inset-top');
                if (safeAreaTopCSS) {
                    safeAreaTop = parseInt(safeAreaTopCSS, 10) || safeAreaTop;
                }
            }

            this.safeAreaTop = safeAreaTop;

            // 底部安全区域高度 - 使用默认值或尝试通过CSS变量获取
            let safeAreaBottom = 0; // 默认值

            // 尝试通过CSS变量获取安全区域底部值
            if (typeof window !== 'undefined' && window.getComputedStyle && typeof document !== 'undefined') {
                const safeAreaBottomCSS = window.getComputedStyle(document.documentElement).getPropertyValue('--safe-area-inset-bottom');
                if (safeAreaBottomCSS) {
                    safeAreaBottom = parseInt(safeAreaBottomCSS, 10) || safeAreaBottom;
                }

                // 如果CSS变量不可用，尝试检测是否为iOS设备并设置适当的默认值
                if (safeAreaBottom === 0 && typeof navigator !== 'undefined' && /iPad|iPhone|iPod/.test(navigator.userAgent) && !(window as any).MSStream) {
                    safeAreaBottom = 34; // iOS设备的默认底部安全距离
                }
            }

            this.safeAreaBottom = safeAreaBottom;

            // 设置标题栏高度 - 顶部安全区域 + 标题栏自身高度
            this.titleTop = safeAreaTop + 50; // 标题栏自身高度设置为50px

            // 为H5环境设置合理的胶囊按钮尺寸（虽然在H5中不存在真实胶囊按钮）
            this.menuButtonWidth = 87;
            this.menuButtonHeight = 32;
        } else {
            // 非H5环境下的原有逻辑（如果有）
            // 可以在这里保留或添加小程序等其他环境的处理逻辑
        }

        // 底部安全距离 + 底部导航栏的高度
        this.barBottom = this.safeAreaBottom + (this.safeAreaBottom > 0 ? utils.rpx2px(100 + 20) : utils.rpx2px(100 + 20 + 20));

        // 中间的容器高度
        this.containerHeight = this.windowHeight - this.titleTop - this.barBottom;
    }

    devicePixelRatio = 1;  // 设备像素比

    menuButtonWidth = 0; // 胶囊按钮的宽度
    menuButtonHeight = 0; // 胶囊按钮的高度

    windowHeight = 0; // 屏幕的高度
    windowWidth = 0; // 屏幕的宽度

    safeAreaTop = 0; // 顶部安全区域的高度
    safeAreaBottom = 0; // 底部安全区域的高度

    titleTop = 0; // 标题栏的位置
    barBottom = 0; // 底部导航栏的位置

    //中间的容器高度
    containerHeight = 0; // 中间的容器高度
}

const utilsStore = new UtilsStore();

export default utilsStore;